package com.olt.permission;

import cn.hutool.Hutool;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import com.olt.dao.oltCenter.IClassStudent;
import com.olt.dao.oltTest.IUserExamScore;
import com.olt.dao.oltTest.IUserScoreTotal;
import com.olt.dao.user.ICustomDao;
import com.olt.dao.user.IPowerDao;
import com.olt.dao.user.IUserRole;
import com.olt.dao.user.UserDao;
import com.olt.domain.oltCenter.ClassStudent;
import com.olt.domain.oltTest.UserExamScore;
import com.olt.domain.oltTest.UserScoreTotal;
import com.olt.domain.user.OltCustom;
import com.olt.domain.user.OltPower;
import com.olt.domain.user.OltUser;
import com.olt.domain.user.UserRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import util.PackUtil;
import util.SM3Util;

import javax.annotation.PostConstruct;
import java.lang.reflect.Field;
import java.util.*;


///权限映射
@Component
public  class Permission {
    @Autowired
    public IPowerDao IPowerDao;

    @Autowired
    ICustomDao iCustomDao;

    @Autowired
    IClassStudent classStudent;

    @Autowired
    public UserDao userDao;

    @Value("${spring.olt.adminName}")
    public String admin;

    @Value("${spring.olt.adminPassWord}")
    public String adminPassWord;

    @Autowired
    IUserRole iUserRole;


    @Autowired
    IUserExamScore iUserExamScore;

    @Autowired
    IUserScoreTotal iUserScoreTotal;


    //生成权限

//    @PostConstruct
//    public void setPermission() {
//
//        Set<Class<?>> classes= PackUtil.getClasses("com.olt.permission");
//        List<String> name=new ArrayList<>();
//        List<OltPower> powers=new ArrayList<>();
//        for (var obj:classes){
//            if(IPermission.class.isAssignableFrom(obj)&& !obj.isInterface()){
//
//                Field[] field=obj.getFields();
//                for(Field f:field){
//                        try {
//                            OltPower oltPower=new OltPower();
//                            Power power=(Power)f.get(null);
//                            oltPower.setPowerNameZh((power.powerNameZh));
//                            oltPower.setPowerName(power.powerName);
//                            oltPower.setIsPath(power.isPath);
//                            oltPower.setParentName(power.parentName);
//                            name.add(power.powerName);
//
//                            if(IPowerDao.getByPowerName(power.powerName)==null){
//                                powers.add(oltPower);
//                            }
//
//
//                        } catch (IllegalAccessException e) {
//                            e.printStackTrace();
//                        }
//                }
//
//            }
//        }
//        IPowerDao.saveAll(powers);
//        List<OltPower> Ids= IPowerDao.findAllByPowerNameNotIn(name);
//        for(OltPower olt:Ids){
//            IPowerDao.deleteById(olt.getPowerId());
//        }
//
//    }

//    @PostConstruct
//    public void iniAdmin(){
//        String password= SM3Util.encrypt(adminPassWord);
//        System.out.println(password);
//        OltUser user =new OltUser();
//        user.setHashPassword(password);
//        user.setUserAccountNotExpired(false);
//        user.setUserEnabled(true);
//        user.setUserType("admin");
//        user.setUserName(admin);
//
//        var res=userDao.getByUserType("admin");
//        Long id=null;
//
//        if(res!=null){
//            res.setUserName(user.getUserName());
//            res.setHashPassword(user.getHashPassword());
//
//            userDao.save(res);
//            id=res.getUserId();
//        }
//        else {
//           id= userDao.save(user).getUserId();
//        }
//        iCustomDao.deleteByUserId(id);
//
//
//        OltCustom oltCustom=new OltCustom();
//
//        oltCustom.setUserId(id);
//        oltCustom.setRegditTime(new Date());
//        oltCustom.setType("admin");
//        oltCustom.setCustomId(IdUtil.simpleUUID());
//        oltCustom.setEmail("admin@olt.com");
//
//        iCustomDao.save(oltCustom);
//
//    }

//
//    @PostConstruct
//    public void  createUser(){
//        int i= 10000;
//        var pass= SM3Util.encrypt("123qwe");
//        for(int k=0;k<50;k++) {
//            OltUser user = new OltUser();
//            user.setUserName(Integer.toString(i));
//            user.setHashPassword(pass);
//            user.setUserEnabled(true);
//            user.setUserType("user");
//            user.setUserAccountNotExpired(true);
//            user = userDao.save(user);
//            OltCustom custom = new OltCustom();
//            custom.setEmail(Integer.toString(i));
//            custom.setUserId(user.getUserId());
//            custom.setName(Integer.toString(i));
//            custom.setCustomId(IdUtil.simpleUUID());
//            custom.setRegditTime(new Date());
//            iCustomDao.save(custom);
//            UserRole userRole = new UserRole();
//            userRole.setRoleId((long) 3);
//            userRole.setUserId(user.getUserId());
//            iUserRole.save(userRole);
//            i++;
//        }
//    }

//    @PostConstruct
//     void setScore(){
//
//         for(long i=22;i<50;i++){
//             Long score= (long) RandomUtil.randomInt(7, 22);
//             var scores=iUserExamScore.findByUserIdAndTestId(score,"62982ad6cf6aa9ea3767762e");
//             var total=iUserScoreTotal.getByTestIdAndUserId("62982ad6cf6aa9ea3767762e",score);
//             for(var s:scores){
//                 UserExamScore userExamScore=new UserExamScore();
//                 userExamScore.setAns(s.getAns());
//                 userExamScore.setPaperId(s.getPaperId());
//                 userExamScore.setUserId(i);
//                 userExamScore.setScore(s.getScore());
//                 userExamScore.setProblemId(s.getProblemId());
//                 userExamScore.setProblemGroupId(s.getProblemGroupId());
//                 userExamScore.setProblemType(s.getProblemType());
//                 userExamScore.setScoreId(IdUtil.getSnowflake(1,1).nextIdStr());
//                 userExamScore.setTestId("62982ad6cf6aa9ea3767762e");
//                 iUserExamScore.save(userExamScore);
//
//             }
//
//             UserScoreTotal userScoreTotal=new UserScoreTotal();
//             userScoreTotal.setTotalId(IdUtil.getSnowflake(1,1).nextIdStr());
//             userScoreTotal.setTestId("62982ad6cf6aa9ea3767762e");
//             userScoreTotal.setUserId(i);
//             userScoreTotal.setScoreTotal(total.getScoreTotal());
//             userScoreTotal.setProblemTotal(total.getProblemTotal());
//             iUserScoreTotal.save(userScoreTotal);
//         }
//
//     }









}
